package com.yyoo.doc.html.style;

import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 样式中的大部分数字类型换为 int 类型
 * 如：字体大小、百分比等
 *
 * @author zzy
 */
public class SizeConverter extends StyleValueConverter<Float>{

    /**
     * 支持的样式列表
     */
    private static final Map<String,Float> SUPPORT_STYLES = new HashMap<>();

    static {
        // 支持的样式及其默认值
        SUPPORT_STYLES.put(StyleAttr.FONT_SIZE,12F);
        // 默认 100%
        SUPPORT_STYLES.put(StyleAttr.WIDTH,100F);
        // 默认 0
        SUPPORT_STYLES.put(StyleAttr.COLS,0F);
        // 边框宽度
        SUPPORT_STYLES.put(StyleAttr.BORDER_WIDTH, null);
        SUPPORT_STYLES.put(StyleAttr.BORDER_TOP_WIDTH,null);
        SUPPORT_STYLES.put(StyleAttr.BORDER_RIGHT_WIDTH,null);
        SUPPORT_STYLES.put(StyleAttr.BORDER_BOTTOM_WIDTH,null);
        SUPPORT_STYLES.put(StyleAttr.BORDER_LEFT_WIDTH,null);
        // margin
        SUPPORT_STYLES.put(StyleAttr.MARGIN_TOP,null);
        SUPPORT_STYLES.put(StyleAttr.MARGIN_RIGHT,null);
        SUPPORT_STYLES.put(StyleAttr.MARGIN_BOTTOM,null);
        SUPPORT_STYLES.put(StyleAttr.MARGIN_LEFT,null);
        // padding
        SUPPORT_STYLES.put(StyleAttr.PADDING, null);
        SUPPORT_STYLES.put(StyleAttr.PADDING_TOP,null);
        SUPPORT_STYLES.put(StyleAttr.PADDING_RIGHT,null);
        SUPPORT_STYLES.put(StyleAttr.PADDING_BOTTOM,null);
        SUPPORT_STYLES.put(StyleAttr.PADDING_LEFT,null);
        // header-rows
        SUPPORT_STYLES.put(StyleAttr.HEADER_ROWS, 0F);
        SUPPORT_STYLES.put(StyleAttr.FOOTER_ROWS, 0F);
        // height
        SUPPORT_STYLES.put(StyleAttr.HEIGHT, null);
        SUPPORT_STYLES.put(StyleAttr.CELL_HEIGHT,null);
        // 位置
        SUPPORT_STYLES.put(StyleAttr.LEFT, null);
        SUPPORT_STYLES.put(StyleAttr.TOP, null);
        SUPPORT_STYLES.put(StyleAttr.RIGHT, null);
        SUPPORT_STYLES.put(StyleAttr.BOTTOM, null);
    }

    @Override
    public boolean support(String styleKey) {
        return SUPPORT_STYLES.containsKey(styleKey);
    }

    @Override
    protected Float defaultValue(String styleKey) {
        return SUPPORT_STYLES.get(styleKey);
    }

    @Override
    protected Float convert(String styleValue) {

        // 检查字符串是否为null或空字符串
        if (styleValue == null || styleValue.isEmpty()) {
            return null;
        }

        if(styleValue.matches("-?\\d+(\\.\\d+)?")){
            return Float.parseFloat(styleValue);
        }

        Pattern pattern = Pattern.compile("-?\\d+(\\.\\d+)?");
        Matcher matcher = pattern.matcher(styleValue);

        if(matcher.find()) {
            String numberStr = matcher.group();
            Float value = Float.parseFloat((numberStr));

            if (styleValue.toLowerCase().endsWith("px")) {
                return value;
            } else if (styleValue.toLowerCase().endsWith("em")) {
                return value * 16;
            } else if(styleValue.toLowerCase().endsWith("%")){
                return value;
            }
        }
        return null;
    }

}
